package com.gticket.orderservice.service;

import com.gticket.orderservice.pojo.OrderItems;
import com.gticket.orderservice.pojo.Orders;

import java.util.List;

/**
 * @Author: 伴你时光尽头
 * @Date: 2019/11/18 16:13
 */
public interface OrderService {

    /**
     * 查询整个影院所有的订单信息
     *
     * @param orders 包含影院的数据库特有字段信息的order对象
     * @return
     */
    public List<Orders> getAll(Orders orders);

    /**
     * 添加订单 并返回订单编号
     *
     * @param orders
     * @return
     */
    public Integer addOrder(Orders orders);

    /**
     * 改变订单状态为  2  已失效
     *
     * @param orders
     */
    public void updateState(Orders orders);

    /**
     * 查询订单状态  返回对应的额状态值
     *
     * @param orders
     * @return
     */
    public int getState(Orders orders);

    /**
     * 根据订单编号id查询对应orders表中所有信息
     *
     * @param orders orders对象中封装信息为数据库前缀名和订单编号id
     * @return
     */
    public Orders getOrderById(Orders orders);

    /**
     * 根据User_id查询订单
     *
     * @param orders
     * @return
     */
    public List<Orders> getOrderByUser_id(Orders orders);

    /**
     * 根据创建时间查询订单
     *
     * @param orders 传入时间段   开始时间start_time  和结束时间lastTime
     * @return
     */
    public List<Orders> getOrderBYCreate_time(Orders orders);

    /**
     * 根据订单编号修改订单状态为已取消  5
     *
     * @param orders
     */
    public void changeOrderStateByOrder_id(Orders orders);


    /**
     * 通过order_num和databasename查询对应的数据行
     *
     * @param orders
     * @return
     */
    public Orders getOrdersByOrder_num(Orders orders);

    /**
     * 通过order_num和databasename在对应的order中存入交易号
     *
     * @param orders
     */
    public void setPay_num(Orders orders);

    /**
     * 改变订单状态为  1  已支付
     *
     * @param orders
     */
    public void updateStateToAlreadyPay(Orders orders);

    /**
     * 改变订单状态状态为  5 已取消s
     *
     * @param orders
     */
    public void updateStateToAlreadyCancel(Orders orders);


    /**
     * 通过order_num和databasename在对应的order中存入    取票码
     *
     * @param orders
     */
    public void setTicketnum(Orders orders);

    /**
     * 获取订单的订单项  电影的开场时间
     *
     * @param orders
     * @return
     */
    public String getMovieStartTime(Orders orders);


    /**
     * 用于已购票未使用 但是电影已经播放完成   此时自动修改电影订单为已完成或已使用状态
     *
     * @param orderItems
     */
    public void updateStateComplete(OrderItems orderItems);


    /**
     * 根据取票码取票时   将对应的订单状态更改为已取票
     *
     * @param orders
     */
    public void updataStateToAlreadyTake(Orders orders);

    /**
     * 通过ticketnum和ddatabasename获取订单的完整信息
     *
     * @param orders
     * @return
     */
    public Orders getOrderByTicketnum(Orders orders);

    /**
     * 将当前user  当前电影场次  之前未支付的订单直接取消
     *
     * @param ordersByOrder_num
     */
    public void cancelInvalidOrder(Orders ordersByOrder_num) throws ClassNotFoundException, Exception;
}
